// 设计算法判断一个整数是否是回文数。

// API方法 --> 转换成字符串
var isPalindrome1: (x: number) => boolean = function (x) {
    return x.toString() === x.toString().split("").reverse().join("")
};

// 推荐解法 --> 推荐解法，数学方法
var isPalindrome2: (x: number) => boolean = function (x) {
    // 边界情况
    if (x < 0 || (x > 0 && x % 10 === 0)) {
        return false;
    }
    let currNum: number = x; // 当前操作数
    let reverseNum: number = 0;// 反转数
    // 反转一半数字的算法
    while (reverseNum < currNum) {
        reverseNum = reverseNum * 10 + currNum % 10;
        currNum = Math.floor(currNum / 10);
    }
    // 对奇偶数位个数情况分别讨论
    return reverseNum === currNum || Math.floor(reverseNum / 10) === currNum;
};

        // 这道题最简单粗暴的方法肯定是使用转换为字符串调用API，
        // 然后直接回文判等的方法
        // 但按照我个人的经验来说这种回文题一般转换为字符串在面试中，面试官是不给过的
        // 所以还是来考虑数学解法
        // 首先边界情况即数小于0或者为10的整数倍就肯定不是回文数，直接返回false
        // 剩下我们只需要声明一个反转数，逐步把这个数反转过来存储进反转数，
        // 判断原数和反转数是否相等即可
        // 值得一提的是仔细思考，你会发现回文数的判断我们不需要反转全部的数字
        // 只需要反转一半即可，因为最中间的那个数字是不影响的
        // 只反转一半的时间复杂度可以得到进一步优化，但如果想这么做别忘了最后要对原数字数位个数的奇偶情况讨论